연결 리스트 (Linked List)
- 데이터를 구조체로 묶어 포인터로 연결한다는 개념
- 다양한 추상 자료형(ADT, Abstract Data Type) 구현의 기반
- 동적으로 새로운 노드의 삽입 및 삭제 간편
- 배열과 달리 특정 인덱스에 접근하기 위해서는 전체를 순서대로 읽어야 함
-
시간복잡도
- O(n) : 탐색
- O(1) : 시작 또는 끝 지점에 아이템 추가, 삭제 및 추출
Runner 기법
-
Fast runner가 연결 리스트의 끝에 도달하면, Slow runner는 정확히 연결 리스트의 중간 지점을 가리킨다.
- Fast runner : 두 칸씩 이동
- Slow runner : 한 칸씩 이동
rev = None
slow = fast = head
while fast and fast.next:
fast = fast.next.next
rev, rev.next, slow = slow, rev, slow.next
if fast:
slow = slow.next
참고 : 「파이썬 알고리즘 인터뷰」